package 微服务.SpringCloud_1.Eureka_1.Eureka的基本原理;

/**
 * Eureka的基本原理
 */
public class index {
    /**
     * 之前的cloud-demo项目中，我们在远程调用服务时，直接将服务的接口路径写在了代码里，造成了硬编码的问题<p>
     * 这样如果后续路径发生改变（如端口号），我们就只能修改代码，重新部署<p>
     * 而且为了应对高并发，我们的提供者通常会部署成多实例形成集群，这样每个实例的端口都不一样<p>
     * 综上，硬编码问题是很严重的，需要我们解决<p></p>
     * <p>
     * 其实在远程调用中还存在大量的一系列问题<p>
     * 例如如何获取到提供者的地址<p>
     * 如何确定服务集群中要获取哪一个提供者<p>
     * 如何知道服务提供者是否健康等等问题<p></p><p></p>
     * <p>
     * 这些问题，都可以通过Eureka来解决<p></p><p></p>
     * <p>
     * 在Eureka的结构中，分成两个角色<p>
     * 第一个角色是<a href="">eureka-server</a>，就是服务端，名字叫做<a href="">注册中心</a><p>
     * 它的作用是记录和管理微服务<p>
     * 第二个角色就是<a href="">服务提供者和服务消费者</a>，他们统称为<a href="">eureka-client</a>，即客户端<p>
     * 在每一个服务启动时（只要是eureka-client），都会自动将自己的服务信息注册到eureka-server（eureka-server自己也是一个微服务，也会注册）<p>
     * 如果有服务需要做远程调用，他就不需要自己去记录服务提供者的信息<p>
     * 而是去找eureka-server，拉取相应服务提供者的服务信息列表（因为是集群）<p></p>
     * <p>
     * 拿到服务信息列表之后，就需要来选择调用哪一个端口的服务（需要在集群中选择一个）<p>
     * 这时候就会用到负载均衡，挑选出一个服务之后，就可以发请求（远程调用）了<p></p>
     * <p>
     * 如何确认服务是否健康？<p>
     * eureka-client中的服务回每隔30秒向eureka-server发送一次心跳请求<p>
     * 如果某一天一个服务不向eureka-server发送心跳请求了，eureka-server就会把它从列表中剔除掉<p></p><p></p>
     * <p>
     * 在eureka集群中eureka-server可以互相注册<p>
     * 他们就可以做数据交流了<p>
     *
     * @param args
     */
    public static void main(String[] args) {

    }
}
